package bt.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import bt.excepcion.DAOExcepcion;
import bt.modelo.ExperienciaLaboral;
import bt.util.ConexionBD;

public class ExperienciaLaboralDAO extends BaseDAO {
	
	public void insertar(ExperienciaLaboral bt) throws DAOExcepcion {
		System.out.println("ExperienciaLaboralDAO: insertar(ExperienciaLaboral bt)");
		String query = "INSERT INTO experiencialaboral(idPostulante, Inicio, IdCargo, PersonalCargo, TipoTrabajo, AreasDesempeno, Empresa, Sueldo, IdMoneda, TrabajaCargo, Observacion) VALUES (?,?,?,?,?,?,?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = (PreparedStatement) con.prepareStatement(query);
			stmt.setInt(1, bt.getIdPostulante());
			stmt.setString(2, bt.getInicio());
			stmt.setInt(3, bt.getIdCargo());
			stmt.setInt(4, bt.getPersonalCargo());
			stmt.setString(5, bt.getTipoTrabajo());
			stmt.setString(6, bt.getAreasDesempeno());
			stmt.setString(7, bt.getEmpresa());
			stmt.setDouble(8, bt.getSueldo());
			stmt.setInt(9, bt.getIdMoneda());
			stmt.setString(10, bt.getTrabajaCargo());
			stmt.setString(11, bt.getObservacion());

			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public void actualizar(ExperienciaLaboral bt) throws DAOExcepcion {
		System.out.println("ExperienciaLaboralDAO: actualizar(ExperienciaLaboral bt)");
		String query = "update experiencialaboral set Inicio=?, IdCargo=?, PersonalCargo=?, TipoTrabajo=?, AreasDesempeno=?, Empresa=?, Sueldo=?, IdMoneda=?, TrabajaCargo=?, Observacion=? where idExperienciaLaboral=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, bt.getInicio());
			stmt.setInt(2, bt.getIdCargo());
			stmt.setInt(3, bt.getPersonalCargo());
			stmt.setString(4, bt.getTipoTrabajo());
			stmt.setString(5, bt.getAreasDesempeno());
			stmt.setString(6, bt.getEmpresa());
			stmt.setDouble(7, bt.getSueldo());
			stmt.setInt(8, bt.getIdMoneda());
			stmt.setString(9, bt.getTrabajaCargo());
			stmt.setString(10, bt.getObservacion());
			stmt.setInt(11, bt.getIdExperienciaLaboral());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public void eliminar(int idExperienciaLaboral) throws DAOExcepcion {
		System.out.println("ExperienciaLaboralDAO: eliminar(Int idExperienciaLaboral)");
		String query = "DELETE FROM experiencialaboral WHERE idExperienciaLaboral=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = (PreparedStatement) con.prepareStatement(query);
			stmt.setInt(1, idExperienciaLaboral);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public ExperienciaLaboral obtener(int idExperienciaLaboral) throws DAOExcepcion {
		System.out.println("ExperienciaLaboralDAO: obtener(Int idExperienciaLaboral)");
		ExperienciaLaboral bt = new ExperienciaLaboral();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select idExperienciaLaboral,idPostulante,Inicio,IdCargo,PersonalCargo,TipoTrabajo,AreasDesempeno,Empresa,Sueldo,IdMoneda,TrabajaCargo,Observacion from experiencialaboral where idExperienciaLaboral=?";
			con = ConexionBD.obtenerConexion();
			stmt = (PreparedStatement) con.prepareStatement(query);
			stmt.setInt(1, idExperienciaLaboral);
			rs = stmt.executeQuery();
			if (rs.next()) {
				bt.setIdExperienciaLaboral(rs.getInt("idExperienciaLaboral"));
				bt.setIdPostulante(rs.getInt("idPostulante"));
				bt.setInicio(rs.getString("Inicio"));
				bt.setIdCargo(rs.getInt("IdCargo"));
				bt.setPersonalCargo(rs.getInt("PersonalCargo"));
				bt.setTipoTrabajo(rs.getString("TipoTrabajo"));
				bt.setAreasDesempeno(rs.getString("AreasDesempeno"));
				bt.setEmpresa(rs.getString("Empresa"));
				bt.setSueldo(rs.getDouble("Sueldo"));
				bt.setIdMoneda(rs.getInt("idMoneda"));
				bt.setTrabajaCargo(rs.getString("TrabajaCargo"));
				bt.setObservacion(rs.getString("Observacion"));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return bt;
	}

	public Collection<ExperienciaLaboral> buscarPorCodigo(int idPostulante) throws DAOExcepcion {
		String query = "select idExperienciaLaboral,idPostulante,Inicio,IdCargo,PersonalCargo,TipoTrabajo,AreasDesempeno,Empresa,Sueldo,IdMoneda,TrabajaCargo,Observacion from experiencialaboral where idPostulante=?";
		Collection<ExperienciaLaboral> lista = new ArrayList<ExperienciaLaboral>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1,idPostulante);
			rs = stmt.executeQuery();
			while (rs.next()) {
				ExperienciaLaboral bt = new ExperienciaLaboral();
				bt.setIdExperienciaLaboral(rs.getInt("idExperienciaLaboral"));
				bt.setIdPostulante(rs.getInt("idPostulante"));
				bt.setInicio(rs.getString("Inicio"));
				bt.setIdCargo(rs.getInt("IdCargo"));
				bt.setPersonalCargo(rs.getInt("PersonalCargo"));
				bt.setTipoTrabajo(rs.getString("TipoTrabajo"));
				bt.setAreasDesempeno(rs.getString("AreasDesempeno"));
				bt.setEmpresa(rs.getString("Empresa"));
				bt.setSueldo(rs.getDouble("Sueldo"));
				bt.setIdMoneda(rs.getInt("idMoneda"));
				bt.setTrabajaCargo(rs.getString("TrabajaCargo"));
				bt.setObservacion(rs.getString("Observacion"));
				lista.add(bt);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}

	public Collection<ExperienciaLaboral> listar() throws DAOExcepcion {
		System.out.println("ExperienciaLaboralDAO: listar()");
		Collection<ExperienciaLaboral> lista = new ArrayList<ExperienciaLaboral>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select idExperienciaLaboral,idPostulante,Inicio,IdCargo,PersonalCargo,TipoTrabajo,AreasDesempeno,Empresa,Sueldo,IdMoneda,TrabajaCargo,Observacion from experiencialaboral";
			stmt = (PreparedStatement) con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				ExperienciaLaboral bt = new ExperienciaLaboral();
				bt.setIdPostulante(rs.getInt("idExperienciaLaboral"));
				bt.setIdPostulante(rs.getInt("idPostulante"));
				bt.setInicio(rs.getString("Inicio"));
				bt.setIdCargo(rs.getInt("IdCargo"));
				bt.setPersonalCargo(rs.getInt("PersonalCargo"));
				bt.setTipoTrabajo(rs.getString("TipoTrabajo"));
				bt.setAreasDesempeno(rs.getString("AreasDesempeno"));
				bt.setEmpresa(rs.getString("Empresa"));
				bt.setSueldo(rs.getDouble("Sueldo"));
				bt.setIdMoneda(rs.getInt("IdMoneda"));
				bt.setTrabajaCargo(rs.getString("TrabajaCargo"));
				bt.setObservacion(rs.getString("Observacion"));
				lista.add(bt);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}
}
